package com.hnu.store.service;

import com.hnu.store.dto.NftDTO;
import com.hnu.store.entity.Work;
import java.io.IOException;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.multipart.MultipartFile;

public interface IWorkService {

  /**
   * 获取NFT列表
   * @param userId 用户ID
   * @param stringPara 变量
   * @param status 状态
   * @param classification 分类
   */
  List<NftDTO> getNftList(Integer userId, String stringPara, String status, String classification);

  /**
   * 上传NFT作品
   * @param file NFT文件
   * @param work 作品详细信息
   */
  Work addNft(MultipartFile file, Work work);

  /**
   * 拆分图片上传
   * @param multipartFile 文件
   * @param work nft信息
   * @param rows 行数
   * @param cols 列数
   * @throws IOException io错误
   */
  void addPicturePieces(MultipartFile multipartFile, Work work ,int rows ,int cols) throws IOException;

  /**
   * 上传音频NFT
   * @param multipartFile 文件
   * @param work nft信息
   * @param count 数量
   */
  void addAudioPieces(MultipartFile multipartFile, Work work ,int count);

  /**
   * 上传文本NFT
   * @param multipartFile 文件
   * @param work nft信息
   * @param count 数量
   */
  void addTextPieces(MultipartFile multipartFile, Work work ,int count);

  /**
   *
   * @param multipartFile
   */
  String preview(MultipartFile multipartFile);

  /**
   *
   * @param multipartFile
   */
  void cancelPreview(MultipartFile multipartFile);

  /**
   * 获取NFT作品
   * @param workId 作品ID
   */
  Work getWorkById(String workId);

  /**
   * 删除NFT
   * @param id 作品ID
   */
  void deleteNft(String id);

  /**
   * 编辑NFT
   * @param multipartFile NFT作品
   * @param work 作品信息
   */
  Work editNft(MultipartFile multipartFile,Work work);

  /**
   * 得到所有NFT
   */
  List<NftDTO> getAllNft();

  /**
   * 下载NFT
   * @param filePath 文件路径
   * @param fileName 文件名
   * @param response HTTP请求返回体
   */
  void downloadNft(String filePath,String fileName, HttpServletResponse response);

  /**
   * 上传链信息
   * @param id 作品ID
   * @param chainHash 链哈希
   * @param status 区块状态
   * @param blockHeight 区块高度
   * @param chainTime 上链时间
   */
  void uploadChain(String id,String chainHash,Integer status,String blockHeight,String chainTime);

  /**
   * 获取链信息
   * @param workId 作品ID
   * @param chainTime 上链时间
   * @param blockHeight 区块高度
   */
  void viewDetails(String workId,String chainTime,String blockHeight);
}
